/**
 * 
 */
package com.duapp.rillmeng.algorithm;

import org.junit.Assert;

/**
 * 逻辑可以使用快速排序，先将数组排序，然后取出length - 2的值返回。时间复杂度为O(N*logN)。<br>
 * 这里实现一个O(N)的算法。
 * 
 * @author mengran
 *
 */
public class SecondMaxValueInArray {

	public static int find(int[] arg) {
		
		// 边界情况
		if (arg == null) {
			throw new NullPointerException();
		}
		if (arg.length == 1) {
			return arg[0];
		}
		
		// Start
		int max = arg[0];
		int secondMax = Integer.MIN_VALUE;
		for (int i = 1; i < arg.length; i++) {
			if (arg[i] > max) {
				secondMax = max;
				max = arg[i];
			}
		}
		
		return secondMax;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		
		int[] arg = new int[] {1, -2, 5, 3, 10, -99, 11};
		Assert.assertEquals(10, SecondMaxValueInArray.find(arg));
		
		System.out.println("OK");
	}

}
